package co.yixiang.yshop.module.pay.config.handlers;

import co.yixiang.yshop.module.pay.enums.PayTypeEnum;
import co.yixiang.yshop.module.pay.mq.producer.PayNoticeProducer;
import com.egzosn.pay.ali.api.AliPayService;
import com.egzosn.pay.ali.bean.AliPayMessage;
import com.egzosn.pay.common.api.PayMessageHandler;
import com.egzosn.pay.common.bean.PayOutMessage;
import com.egzosn.pay.common.exception.PayErrorException;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import javax.annotation.Resource;
import java.util.Map;

/**
 * 支付宝支付回调处理器
 *
 * @author hupeng
 * @date 2023/7/15
 */
@Slf4j
@Component
public class AliPayMessageHandler implements PayMessageHandler<AliPayMessage, AliPayService> {

    @Resource
    private PayNoticeProducer payNoticeProducer;

    /**
     * 处理支付回调消息的处理器接口
     *
     * @param payMessage 支付消息
     * @param context    上下文，如果handler或interceptor之间有信息要传递，可以用这个
     * @param payService 支付服务
     * @return xml, text格式的消息，如果在异步规则里处理的话，可以返回null
     * @throws PayErrorException 支付错误异常
     */
    @Override
    public PayOutMessage handle(AliPayMessage payMessage, Map<String, Object> context, AliPayService payService) throws PayErrorException {

//        Map<String, Object> message = payMessage.getPayMessage();
//        //交易状态
//        String trade_status = (String) message.get("trade_status");
//
//        //交易完成
//        if ("TRADE_SUCCESS".equals(trade_status) || "TRADE_FINISHED".equals(trade_status)) {
//
//            String orderNo = (String) payMessage.getPayMessage().get("out_trade_no");
//            //截取订单编号
//            String[] split = orderNo.split("-");
//            if (split.length > 0) {
//                String orderId = split[0];
//                log.info("支付宝回调消息处理，发送处理消息orderId={}", split[0]);
//                //消息队列处理
//                payNoticeProducer.sendPayNoticeMessage(orderId, PayTypeEnum.ALI.getType());
//                log.info("支付宝回调消息发送完毕");
//                return payService.getPayOutMessage("success", "成功");
//            }
//        }
//
        return payService.getPayOutMessage("fail", "失败");
    }
}
